package 多线程4;
//线程池是什么?
//本来多进程就是解决并发编程的方案,但是进程有点重量.(创建和销毁,开销比较大)
//因此引入了线程,线程比进程要轻量很多.
//即便如此,如果某些场景中,需要频繁的创建销毁线程,此时,线程的创建销毁开销,也就无法忽视了.

/**
 * 为了解决这样的问题:
 * 1.引入协程.(协程可以理解成是一个轻量级线程)
 * 2.引入线程池.(避免用户态和内核态的切换)
 *   使用线程的时候,不是说用的时候,才创建,而是提前创建好,放到一个"池子里"(和字符串常量池是类似的东西)
 *
 *   当我们需要使用线程得到时候,直接从池子里取一个线程过来.
 *   当我们不需要这个线程的时候,就把这个线程还回池子中.
 *   (此时我们的操作就会比创建销毁线程效率更高)
 *
 *   如果是真的创建/销毁线程,涉及到用户态和内核态的切换.
 *   (切换到内核态,然后创建出对应的PCB来)
 *
 *   如果不是真的创建销毁.而只是放到池子里,相当于全在用户态,就能搞定这个事情.
 *
 *   在用户态操作,就会更高效.
 *   切换到内核态之后,操作就可能很低效.
 *
 *   ---------------------
 *   啥叫用户态和内核态?
 *   用户态就是应用程序执行的代码.
 *   内核态就是操作系统内核执行的代码.
 *   一般认为,用户态和内核态之间的切换,是一个开销比较大的操作.
 *
 *   内核是很忙的,要给N多个进程同时提供服务.因此一旦要是进程把某个任务交给内核
 *   来去做,此时啥时候能把事情做好,就有些难以把握了
 *  经典的面试题:谈谈线程池是干啥的
 */
public class TestDemo1 {
}
